# encoding=utf-8

from seg_common import RedisService


class IStatusUpload:
    """状态上传接口类，规范后续长任务的相关行为
        数据存储中间件是redis
        集成此类的对象，主要实现的上报的数据格式定义
        可以不局限于下面引导的注释，可以任意添加需要添加的内容
    """

    def __init__(self):
        self.all_redis = RedisService()

    def init_struct(self, redis_key: str, **kwargs):
        """redis数据结构:
            - 用于生成redis中存储的结构体
        """
        raise NotImplementedError

    def update_state(self, redis_key: str, state, **kwargs):
        """主要指的是整体的状态：
            - preparing, processing, done, 整体的
        """
        raise NotImplementedError

    def update_current(self, redis_key: str, name: str, count: int = 0, **kwargs):
        """处理的进度信息:
            - 当前处理的文件名
            - 正在处理的图片数量
        """
        raise NotImplementedError

    def update_total(self, redis_key: str, count: int = 0, **kwargs):
        """整体进度查看:
            - count需要累加到已经处理的数量上
            - total_count: 代表整体的数量
        """
        raise NotImplementedError

    def update_seq(self, redis_key: str, **kwargs):
        """信息更新的主体流程
        """
        raise NotImplementedError

    def get_info_struct(self):
        """返回上传的数据格式，用于其他类的操作
        """
        raise NotImplementedError

    @staticmethod
    def update_state_from_kwargs(**kwargs):
        redis_id = kwargs.get("redis_id", None)
        state_upload = kwargs.get('state_upload', None)
        token = kwargs.get('token', '')
        if state_upload and redis_id:
            state_upload.update_current(redis_id, token)

